home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / bell212.arc / AGCTBL.BAS next >
Encoding:
BASIC Source File  |  1986-07-18  |  5.4 KB  |  138 lines

  1.  
  2.  
  3.  
  4.     10 '     THIS PROGRAM GENERATES THE GAIN TABLE FOR THE AUTOMATIC
  5.     20 '     GAIN CONTROL ALGORITHM IN THE MODEM CODE
  6.     30 '
  7.     31 '        Written by:  Peter Ehlig
  8.     32 '        Copyright Texas Instruments,  07/18/86
  9.     33 '
  10.     40 '     THE PROGRAM PROMPTS THE USER IN THE FOLLOWING MANNER:
  11.     50 '
  12.     60 '           AGC TABLE ADJUST FACTOR ?
  13.     70 '            This feature allows the AGC to gain to a level lower
  14.     80 '            than unity.  The entry for unity gain is 256. To  set
  15.     90 '            the gain lower than unity, enter the appropriate per-
  16.     100 '           centage of 256.
  17.     110 '
  18.     120 '          ENTER NAME OF OUTPUT FILE =
  19.     130 '            This prompt request the name of a MS-DOS format file
  20.     140 '            name to store the generated table.
  21.     150 '
  22.     160 '          TABLE LENGTH =
  23.     170 '            This feature allows the user to generate different
  24.     180 '            length AGC tables.  This allows the accuracy of the
  25.     190 '            table to vary by the number of entries.  The number
  26.     200 '            of entries is tied to the number of bits used in the
  27.     210 '            table lookup.  In the modem algorithm six bits were
  28.     220 '            used in the lookup, therefore the table length is
  29.     230 '            64 words.
  30.     240 '
  31.     250 '    THE TABLE GENERATED INCLUDES DESCRIPTIVE COMMENTS AND IS
  32.     260 '    BE IN A FORM READY TO BE ADDED DIRECTLY INTO THE ASSEMBLY CODE
  33.     270 '    FOR AN ALGORITHM.  SINCE THE AGC SOFTWARE SHIFTS THE LOOKUP
  34.     280 '    VALUE TO THE MOST SIGNIFICANT BIT, THE FIRST HALF OF THE AGC
  35.     290 '    TABLE (THE LESS ACCURATE HALF) NOT USED.  THEREFORE, THE USER
  36.     300 '    CAN DELETE THE FIRST HALF AND SAVE A CONSIDERABLE AMOUNT OF PRO-
  37.     310 '    GRAM MEMORY SPACE.
  38.     320 '
  39.     330 '    THIS PROGRAM WAS WRITTEN BY PETER EHLIG FOR USE ON A
  40.     340 '    TEXAS INSTRUMENTS PROFESSIONAL COMPUTER.
  41.     350 '    THE CODE TO MY KNOWLEDGE IS WRITTEN IN STANDARD MS-BASIC AND
  42.     360 '    SHOULD OPERATE ON ANY MS-DOS SYSTEM.
  43.     370 '
  44.     380 PRINT 'PROGRAM STARTED"
  45.     390 DIM TBLD(500),HTB$(500)
  46.     400 OPEN "LPT1:" FOR OUTPUT AS #1
  47.     410 INPUT "AGC TABLE ADJUSTMENT FACTOR ? ",GAINADJ
  48.     420 INPUT "ENTER NAME OF OUTPUT FILE = ",OUTFILE$
  49.     430 OPEN OUTFILE$ FOR OUTPUT AS #3
  50.     440 PI = 3.1415927#
  51.     450 PI2 = PI * 2
  52.     460 INPUT "TABLE LENGTH = ",TBLEN
  53.     470 GOSUB 820  ' GENERATE TABLE HEADER
  54.     480 DELTA = 32768! / TBLEN
  55.     490 FOR I = 1 TO TBLEN
  56.     500 TBL = INT(32767 / (I * DELTA) * GAINADJ)
  57.     510 TBLD(I) = TBL
  58.     520 HTBL$ = HEX$(TBL)
  59.     530 HTB$(I) = HTBL$
  60.     540 GOSUB 690  ' DISPLAY RANGE ACCURACY  (OPTIONAL)
  61.     550 NEXT
  62.     560 GOTO 650
  63.     570 ' SAVE AGC TABLE TO DISK
  64.     580 PRINT#3, "       DATA ";
  65.     590 PRINT#3, USING ">\  \";HTB$(I);
  66.     600 PRINT#3, "                ";
  67.     610 TBLD1 = TBLD(I) / 256
  68.     620 PRINT#3, USING "###.#######";TBLD1
  69.     630 RETURN
  70.     640 ' END OF AGC TABLE SAVE ROUTINE
  71.     650 GOSUB 940  ' DISPLAY SECOND LEVEL LOOKUP
  72.     660 GOSUB 880  ' GENERATE TABLE TERMINATION COMMENTS
  73.     670 PRINT "PROGRAM FINISHED"
  74.     680 END
  75.     690 ' THIS ROUTINE DISPLAYS INFORMATION ABOUT THE RANGE
  76.     700 ' ACCURACY OF EACH STEP OF THE TABLE
  77.     710 TBLRL = (I - 1) * DELTA - 256
  78.     720 IF TBLRL < 0 THEN TBLRL = 0
  79.     730 SH1$ = HEX$(TBLRL)
  80.     740 SH1A$ = HEX$(TBLRL * TBL / 256)
  81.     750 TBLRH = (I - 1) * DELTA + 255
  82.     760 SH2$ = HEX$(TBLRH)
  83.     770 SH2A$ = HEX$(TBLRH * TBL / 256)
  84.     780 PRINT I;TBL;HTBL$;" ";SH1$;" ";SH1A$;" ";SH2$;" ";SH2A$
  85.     790 ' PRINT#1,I;TBL;HTBL$;" ";SH1$;" ";SH1A$;" ";SH2$;" ";SH2A$
  86.     800 RETURN
  87.     810 ' END OF RANGE INFORMATION
  88.     820 ' THE ROUTINE GENERATES THE HEADER COMMENTS FOR THE TABLE
  89.     830 PRINT#3,"***********************************************************"
  90.     840 PRINT#3,"AGCTBL EQU  $             AGC TABLE LENGTH = ";
  91.     850 PRINT#3, USING "###";TBLEN
  92.     860 RETURN
  93.     870 ' END OF HEADER ROUTINE
  94.     880 ' THIS ROUTINE GENERATES THE TABLE TERMINATION COMMENTS
  95.     890 PRINT#3,"***********************************************************"
  96.     900 PRINT#3, "       PAGE"
  97.     910 CLOSE
  98.     920 RETURN
  99.     930 ' END OF TERMINATOR ROUTINE
  100.     940 ' TRY SECOND LEVEL LOOKUP
  101.     950 DELTA1 = DELTA * 8
  102.     960 FOR I = 1 TO 64
  103.     970 GOSUB 570  ' SAVE AGC TABLE TO DISK
  104.     980 TBLRL = (I - 1) * DELTA - 256
  105.     990 IF TBLRL < 0 THEN TBLRL = 0
  106.     1000 TBLRH = (I - 1) * DELTA + 255
  107.     1010 SH1$ = HEX$(TBLRL)
  108.     1020 SH2$ = HEX$(TBLRH)
  109.     1030 GOSUB 1100 ' CALCULATE ACCURACY STEPS
  110.     1040 SH1A$ = HEX$(TBLRL * TBLD(TBLR1) / SHF1)
  111.     1050 SH2A$ = HEX$(TBLRH * TBLD(TBLR2) / SHF1)
  112.    1060 PRINT I;TBL;HTBL$;" ";SH1$;" ";SH1A$;" ";SH2$;" ";SH2A$;TBLR1;TBLR2;SHF1
  113.     1080 NEXT 1090 RETURN
  114.     1100 'TABLE LOOKUP SHIFTER
  115.     1110 TBLEV = TBLRH - 4096
  116.     1120 IF TBLEV > 0 GOTO 1180
  117.     1130 TBLEV = TBLEV + 2048
  118.     1140 IF TBLEV > 0 GOTO 1220
  119.     1150 TBLEV = TBLEV + 1024
  120.     1160 IF TBLEV > 0 GOTO 1260
  121.     1170 GOTO 1300
  122.     1180 TBLR1 = I
  123.     1190 TBLR2 = I
  124.     1200 SHF1 = 256
  125.     1210 RETURN
  126.     1220 TBLR2 = FIX(TBLRH / 64) + 1
  127.     1230 TBLR1 = FIX(TBLRL / 64) + 1
  128.     1240 SHF1 = 32
  129.     1250 RETURN
  130.     1260 TBLR2 = FIX(TBLRH / 32) + 1
  131.     1270 TBLR1 = FIX(TBLRL / 32) + 1
  132.     1280 SHF1 = 16
  133.     1290 RETURN
  134.     1300 TBLR2 = FIX(TBLRH / 16) + 1
  135.     1310 TBLR1 = FIX(TBLRL / 16) + 1
  136.     1320 SHF1 = 8
  137.     1330 RETURN
  138.